package com.novatec.mvc.servicio;

import java.text.ParseException;
import java.util.Date;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.novatec.dao.ClientesDAO;
import com.novatec.dao.ContratosDAO;
import com.novatec.mvc.forms.ContratoForm;

@Service
public class ContratosService {

	private final Logger logger = Logger.getLogger(this.getClass());
	
	@Autowired
	private ContratosDAO contratosDAO;
	@Autowired
	private ClientesDAO clientesDAO;
	
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void guardarContrato(ContratoForm contratoFormItem) throws ParseException{
		logger.debug("guardar Cliente");
		//Si hay datos actualiza de lo contrario inserta
		if (clientesDAO.existClienteByRUCDNI(contratoFormItem.getRuc_dni()))
			clientesDAO.actualizarCliente(contratoFormItem);
		else{
			clientesDAO.insertarCliente(contratoFormItem);
		}
		logger.debug("guardar Contrato");
		if(contratoFormItem.getMaxDevoluciones()==null)
			contratoFormItem.setMaxAdicionalesCajas(0);
		if(contratoFormItem.getMaxAdicionalesCajas()==null)
			contratoFormItem.setMaxAdicionalesCajas(0);
		contratosDAO.insertarContrato(contratoFormItem);
	}

	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void actualizarContrato(ContratoForm contratoFormItem) throws ParseException{
		logger.debug("actualizar Cliente");
		clientesDAO.actualizarCliente(contratoFormItem);
		logger.debug("actualizar Contrato");
		if(contratoFormItem.getModalidad()=="rotativo")
			contratosDAO.actualizarContrato(contratoFormItem);
	}
	
	public boolean validarVigencia(ContratoForm contratoForm) {
		for (Map<String, Object> contrato : contratosDAO.getContratosVigentesByIdCliente(contratoForm.getIdCliente())) {
			   
			Date fechaFin= (Date) contrato.get("fechaFin");
			Date fechaIni= (Date) contratoForm.getFechaIni();
			if (fechaIni.after(fechaFin))
				continue;
			else{
				contratoForm.setVigenteIdContrato((Long) contrato.get("idContrato"));
				contratoForm.setVigenteFechaIni((Date) contrato.get("fechaIni"));
				contratoForm.setVigenteFechaFin(fechaFin);
				return false;
			}
		}
		return true;
	}


}
